function menu($){
	return{
		init:function(container,cur,sec){
			this.setMenuType(container);
			this.gen(container,cur,sec);
			this.finish(container);
		},
		setMenuType:function(container){
			if(MenuSet.type){
				$(container).addClass(MenuSet.type);
			}
		},
		gen:function(container,cur,sec){
			var _this = this;
			var sortedMenus = MenuSet.menus.sort(_this.sort);
			var html = _this.recurseMenu(sortedMenus,cur,sec);
			$(container).html(html);
		},
		recurseMenu:function(menus,cur,sec){
			var _this = this,html = "";
			$(menus).each(function(){
				html += _this.menuSchema(this,cur,sec);
				if(this.subs){
					html += '<ul>';
					var subMenus = this.subs.sort(_this.sort);
					html += _this.recurseMenu(subMenus,cur,sec);
					html += '</ul>';
				}
				html += '</li>';
			});
			return html;
		},
		menuSchema:function(data,cur,sec){
			var _this = this;
			var html = '<li id="' + data.level+'-'+data.sort+'" class="' + _this.menuClass(data,cur,sec)  + '" >';
			html += '<a href="'+ (data.url?data.url:"#") +'" >' + data.text + '</a>';
			html += (data.subs?'':'</li>');
			return html;
		},
		menuClass:function(data,cur,sec){
			var cls = "level-menu";
			var _this = this;
			if(data.cls == "title"){
				cls +=" " + data.cls;
			}else{
				if(data.level == 1){
					cls += ' first';
				}else{
					cls += ' second';
				}
				cls += ' ' + (data.cls || "");
			}
			if(data.cls == "toggle"){
				if(cur){
					if(data.no == cur.substr(0,cur.indexOf("-"))){
						cls += " cur";
					} 
				}
			}
			if(data.no == cur && data.level == 1){
				cls += ' cur';
			}
			if(data.level == 2 && sec){
				if(data.no == sec){
					cls += ' cur';
				}
			}
			
			return cls;
		},
		finish:function(container){
			$(container).addClass("loaded");
		},
		sort:function(a,b){
			return a.sort - b.sort;
		}
	}
}


if("function"==typeof define && define.amd && define){
	define(['jquery'],function($){
		return menu($);
	});
}